/*
 * @(#)DocPref.java 1.00 02 Ago 2007
 *
 * Copyright (c) 2005-2007 Soluciones Info Móviles S.A.C.
 * Av. Javier Prado Oeste 203 - Piso 13, Lima 27, Perú.
 * Todos los derechos reservados.
 */

package sim.pref;

import sim.framework.*;
import sim.framework.io.*;
import sim.utils.*;

/**
 * Documento que almacena la información de autenticación
 *
 * @author      Omar Quintana
 * @version     %I%, %G%
 * @since       1.0
 */
public final class DocPref extends Document implements FileGets {

    private static final int HIT_ADDR = 1;
    private static final int HIT_PORT = 2;
    
    private String m_Address = null;
    private String m_Port = null;
    private int m_Hit;
    
    /** 
     * Contructor.
     * 
     * @param s Referencia a una intancia de la clase Simlet.
     * 
     * @return 
     */
    public DocPref(Simlet s) {
        super(s);
    }

    /** 
     * Borra los archivo relacionados con las preferencias de usuario.
     * 
     */
    public static void delete() {
	File.delete(FileNames.FILE_PREF);
    }
    
    /** 
     * Carga las preferencias de disco desde el archivo FileNames::FILE_PREF
     * 
     * Una por linea segun el orden DocPref::HIT_ADDR, DocPref::HIT_PORT.
     * 
     * @return Devuelve true en caso de éxito, en caso contrario devuelve false.
     */
    public boolean load() {
	FileStream file;
	// Abrimos el archivo
	file = (FileStream)FileStream.create(m_Simlet, 
					     FileNames.FILE_PREF, 
					     File.MODE_READ);
	if (file != null) {
	    m_Hit = 0;
	    file.gets(this);
	    file.close();
	}
	return isLoaded();
    }
    
    /** 
     * Guarda las preferencias en disco sobre el archivo FileNames::FILE_PREF
     * 
     * Una por linea segun el orden DocPref::HIT_ADDR, DocPref::HIT_PORT.
     * 
     * @return Devuelve true en caso de éxito, en caso contrario devuelve false.
     */
    public boolean save() {
	FileStream file;
	// Abrimos el archivo
	file = (FileStream)FileStream.create(m_Simlet, 
					     FileNames.FILE_PREF, 
					     File.MODE_WRITE);
	if (file != null) {
	    file.puts(m_Address);
	    file.puts(m_Port);
	    file.close();
	    return true;
	}
	return false;
    }

    public boolean fileGetsLine(final byte[] line, int size, int crlf) {
	if (size > crlf) {
	    switch (++m_Hit) {
	    case DocPref.HIT_ADDR:
		m_Address = new String(line, 0, size - crlf);
		break;
	    case DocPref.HIT_PORT:
		m_Port = new String(line, 0, size - crlf);
		break;
	    }
	}
	return true;
    }
    
    /** 
     * Determina si el documento ha sido cargado completamente.
     * 
     * 
     * @return Devuelve true si fue cargado complemtamente, en caso contrario
     *         devuelve false.
     */
    public final boolean isLoaded() {
	return ((m_Address != null) && (m_Port != null));
    }

    /** 
     * Devuelve el puerto la dirección IP del servidor DAS.
     * 
     * 
     * @return 
     */
    public final String getAddress(){
        return m_Address;
    }
    
    /**
     * Devuelve el puerto de comunicación del servidor DAS.
     *
     * @return  cadena que contiene el puerto.
     */
    public final String getPort(){
        return m_Port;
    }
    
    /**
     * Establece la la dirección IP del servidor DAS.
     *
     * @param   address cadena que la dirección IP.
     */
    public void setAddress(final String address){
        m_Address = address;
    }
    
    /**
     * Establece el puerto de comunicación del servidor DAS.
     *
     * @param   port    cadena que contiene el puerto
     */
    public void setPort(final String port){
        m_Port = port;
    }
    
    
}
